//namespace ContosoUniversity.Controllers
//{
//    using System;
//    using System.Linq;
//    using NRepository.Core.Query;

//    public class SwitchQueryStrategy : QueryStrategy
//    {
//        public SwitchQueryStrategy(Func<QueryStrategy> defaultQueryStrategyFunc, params ConditionalQueryStrategy[] conditionalQueryStrategies)
//        {
//            ConditionalQueryStrategies = conditionalQueryStrategies;
//            DefaultQueryStrategyFunc = defaultQueryStrategyFunc;
//        }

//        public SwitchQueryStrategy(QueryStrategy defaultQueryStrategy, params ConditionalQueryStrategy[] conditionalQueryStrategies)
//        {
//            ConditionalQueryStrategies = conditionalQueryStrategies;
//            DefaultQueryStrategy = defaultQueryStrategy;
//        }

//        public override IQueryable<T> GetQueryableEntities<T>(object additionalQueryData)
//        {
//            foreach (var strategy in ConditionalQueryStrategies)
//            {
//                if (strategy.RunStrategy)
//                {
//                    strategy.QueryableRepository = this.QueryableRepository;
//                    return strategy.GetQueryableEntities<T>(additionalQueryData);
//                }
//            }

//            var defaultStrategy = DefaultQueryStrategyFunc != null
//                            ? DefaultQueryStrategyFunc()
//                            : DefaultQueryStrategy;

//            defaultStrategy.QueryableRepository = this.QueryableRepository;
//            return defaultStrategy.GetQueryableEntities<T>(additionalQueryData);
//        }

//        public Func<QueryStrategy> DefaultQueryStrategyFunc
//        {
//            get;
//        }

//        public QueryStrategy DefaultQueryStrategy
//        {
//            get;
//        }

//        public ConditionalQueryStrategy[] ConditionalQueryStrategies
//        {
//            get;
//        }
//    }
//}
